import subprocess
import os

def convert_docx_to_pdf(docx_path: str, pdf_path: str):
    """
    使用LibreOffice将DOCX文件转换为PDF。

    参数:
    docx_path (str): 输入的DOCX文件的完整路径。
    pdf_path (str): 输出的PDF文件的完整路径。
    """
    # 从输出路径中提取目录，因为LibreOffice的--outdir需要的是目录
    output_dir = os.path.dirname(pdf_path)
    # 构建命令行参数
    # --headless: 无头模式运行，不打开GUI
    # --convert-to pdf: 指定转换的目标格式为pdf
    # --outdir: 指定输出目录
    command = [
        "libreoffice",
        "--headless",
        "--convert-to",
        "pdf",
        docx_path,
        "--outdir",
        output_dir
    ]

    try:
        # 执行命令
        result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        # LibreOffice默认会在输出目录生成与源文件同名但扩展名不同的文件
        # 我们需要将其重命名为您指定的输出文件名
        original_pdf_name = os.path.splitext(os.path.basename(docx_path))[0] + ".pdf"
        generated_pdf_path = os.path.join(output_dir, original_pdf_name)

        # 将生成的文件重命名为用户指定的路径
        os.rename(generated_pdf_path, pdf_path)

        print(f"文件成功转换并保存至: {pdf_path}")

    except FileNotFoundError:
        print("错误: 'libreoffice' 命令未找到。请确保LibreOffice已安装并已将其添加到系统的PATH中。")
    except subprocess.CalledProcessError as e:
        print(f"转换过程中发生错误:")
        print(f"返回码: {e.returncode}")
        print(f"标准输出: {e.stdout.decode()}")
        print(f"标准错误: {e.stderr.decode()}")